package com.game.Maze.Renderers;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL10;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.game.Maze.Objects.IMaze;

/**
 * Объект, реализующий отображение всей игры
 * 
 */
public class GameRenderer implements IRenderer, ITransformRenderer
{
  private IMaze m_Maze = null;

  private MazeRenderer m_MazeRenderer = null;
  private CameraRenderer m_CameraRenderer = null;
  private CameraEyeRenderer m_CameraEyeRenderer = null;
  private SpriteBatch m_Batch;
  private boolean m_Created = false;

  public GameRenderer(IMaze maze)
  {
    setMaze(maze);
    create(0, 0);
  }

  public void setMaze(IMaze maze)
  {
    m_Maze = maze;
  }

  @Override
  public void resize(int aWidth, int aHeight)
  {
    m_CameraRenderer.resize(aWidth, aHeight);
  }

  @Override
  public void moveTo(int aColumn, int aRow)
  {
  }

  /**
   * Создает все необходимые рендереры
   */
  private void createMazeRenderer()
  {
    // Создаем рендер лабиринта
    m_MazeRenderer = new MazeRenderer(m_Maze);
    m_MazeRenderer.create(0, 0);

    // Перемещаем камеру в центр лабиринта
    // TODO камера должна перемещатся на игрока
    m_CameraRenderer.moveTo(m_Maze.size() / 2, m_Maze.size() / 2);
    m_CameraEyeRenderer.create(m_Maze.size() / 2, m_Maze.size() / 2);
  }

  @Override
  public void create(int aColumn, int aRow)
  {
    if (!m_Created)
    {
      m_Created = true;
      m_Batch = new SpriteBatch();

      // Создаем рендерер камеры
      m_CameraRenderer = new CameraRenderer();
      m_CameraRenderer.create(0, 0);
    }

    // Создаем рендер метки камеры
    m_CameraEyeRenderer = new CameraEyeRenderer();
    m_CameraEyeRenderer.create(0, 0);

    // Создаем рендер лабиринта
    createMazeRenderer();
  }

  @Override
  public void render(SpriteBatch batch)
  {
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);

    m_Batch.begin();
    m_CameraRenderer.render(m_Batch);
    m_MazeRenderer.render(m_Batch);
    //m_CameraEyeRenderer.render();
    m_Batch.end();
  }
}
